<?php

/**
 * HTTP响应通用函数库
 * 提供发送JSON响应、设置响应头、设置响应状态码、发送响应、发送文件响应、发送重定向响应、发送错误响应、发送成功响应等功能
 */
namespace core;

use core\Debug;  // 引入 Debug 类

class Response {
    /**
     * 发送JSON响应
     * @param array $data 响应数据
     * @param int $status 响应状态码
     */
    public static function json($data, $status = 200) {
        self::setHeader('Content-Type: application/json');
        self::setStatus($status);
        echo json_encode($data);  // 保持不变，这是功能性输出
    }

    /**
     * 设置响应头
     * @param string $header 响应头
     */
    public static function setHeader($header) {
        header($header);
    }

    /**
     * 设置响应状态码
     * @param int $status 响应状态码
     */
    public static function setStatus($status) {
        http_response_code($status);
    }

    /**
     * 发送响应
     * @param string $data 响应数据
     * @param int $status 响应状态码
     */
    public static function send($data, $status = 200) {
        self::setHeader('Content-Type: text/plain');
        self::setStatus($status);
        echo $data;  // 保持不变，这是功能性输出
    }

    /**
     * 发送文件响应
     * @param string $filePath 文件路径
     * @param string $fileName 文件名
     */
    public static function sendFile($filePath, $fileName) {
        self::setHeader('Content-Type: application/octet-stream');
        self::setHeader('Content-Disposition: attachment; filename="' . $fileName . '"');
        self::setHeader('Content-Length: ' . filesize($filePath));
        readfile($filePath);
    }

    /**
     * 发送重定向响应
     * @param string $url 重定向URL
     * @param int $status 响应状态码
     */
    public static function redirect($url, $status = 302) {
        self::setHeader('Location: ' . $url);
        self::setStatus($status);
    }

    /**
     * 发送错误响应
     * @param string $message 错误信息
     * @param int $status 响应状态码
     */
    public static function error($message, $status = 500) {
        self::setHeader('Content-Type: text/plain');
        self::setStatus($status);
        Debug::error($message);  // 使用 Debug::error() 代替 echo
    }

    /**
     * 发送成功响应
     * @param string $message 成功信息
     * @param int $status 响应状态码
     */
    public static function success($message, $status = 200) {
        self::setHeader('Content-Type: text/plain');
        self::setStatus($status);
        echo $message;  // 保持不变，这是功能性输出
    }

    /**
     * 发送空响应
     * @param int $status 响应状态码
     */
    public static function empty($status = 204) {
        self::setHeader('Content-Type: text/plain');
        self::setStatus($status);
    }
}
